﻿/*****************************************************
 * 本类库的核心系 JNTemplate
 * (C) JNTemplate 2011
 * 作者：翅膀的初衷 QQ:4585839
 * 网址：http://www.JiNianNet.com
 *****************************************************/
using System;

namespace JinianNet.JNTemplate.Process.Element
{
    public class VariableTag : SimpleTag
    {
        public VariableTag(string text)
            : base(TokenKind.Variable, text)
        {

        }
        public override object Parser(VariableScope varScope)
        {
            if (base.Parser(varScope) == null)
                return "变量名不能为空";

            string key = base.Parser(varScope).ToString();

            if (string.IsNullOrEmpty(key))
                return string.Empty;

            key = key.Trim();

            if (key.Length == 0 || key[0] == '.' || key[key.Length - 1] == '.')
            {
                return string.Format("变量 “{0}” 语法错误", key);
            }

            return varScope.Eval(key);

        }
        #region
        //public override object Parser(VariableScope varScope)
        //{
        //    if (base.Parser(varScope) == null)
        //        return "变量名不能为空";

        //    string key = base.Parser(varScope).ToString();

        //    if (string.IsNullOrEmpty(key))
        //        return string.Empty;

        //    key = key.Trim();

        //    if (key.Length == 0 || key[0] == '.' || key[key.Length-1] == '.')
        //    {
        //        return string.Format("变量 “{0}” 语法错误", key);
        //    }
        //    object value;
        //    if (key.IndexOf(".") > 0)
        //    {
        //        string[] list = key.Split('.');
        //        value = GetObject(list[0], varScope);
        //        for (int i = 1; i < list.Length; i++)
        //        {
        //            if (value == null)
        //                return string.Format("空对象不存在属性 {0}", list[i]);
        //            value = GetObject(list[i], value, varScope);
        //        }
        //    }
        //    else
        //    {
        //        value = GetObject(key, varScope);
        //    }
        //    return value;
        //}
        //private object GetObject(string key, VariableScope varScope)
        //{
        //        return varScope[key];
        //}
        //private object GetObject(string key, object obj, VariableScope varScope)
        //{
        //        return varScope.EvalProperty(obj, key);
        //}
        #endregion
    }
}

